// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.service;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

import com.eva.android.NotificationHelper;
import com.x52im.rainbowchat.http.logic.dto.RosterElementEntity;
import com.x52im.rbchat.MyApplication;
import com.x52im.rbchat.R;
import com.x52im.rbchat.logic.main.SplashActivity;

import java.text.MessageFormat;

/**
 * RainbowChat的独立服务实现类。
 * <p>
 * 目前的唯一作用是：作为前台服务，提升Demo的运行优先级，确保在高版本Andriod系统上进程保活和网络保活.
 * 
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @version 1.0
 */
public class GeniusService extends Service
{
	final static String TAG = GeniusService.class.getSimpleName();

	private NotificationManager mNM;

	/**
	 * Class for clients to access. Because we know this service always runs in
	 * the same process as its clients, we don't need to deal with IPC.
	 */
	public class LocalBinder extends Binder
	{
		public GeniusService getService()
		{
			return GeniusService.this;
		}
	}

	@Override
	public void onCreate()
	{
		mNM = NotificationHelper.NotificationCreator.getNotificationManager(MyApplication.getInstance2());
		// Display a notification about us starting. We put an icon in the status bar.
		showNotification();
	}

//	@Override
//	public int onStartCommand(Intent intent, int flags, int startId)
//	{
//		Log.i(TAG, ">>>>>>>>Received start id " + startId + ": " + intent);
//		// We want this service to continue running until it is explicitly
//		// stopped, so return sticky.
//		return START_STICKY;//START_REDELIVER_INTENT
//	}

	@Override
	public void onDestroy()
	{
//		// Cancel the persistent notification.
//		mNM.cancel(R.string.ident_genius_services_started);
		//将service从前台移除，并允许随时被系统回收
		this.stopForeground(true);

		// Tell the user we stopped.
		Log.d(TAG, "服务Destroy了哦！");
	}

	@Override
	public IBinder onBind(Intent intent)
	{
		return mBinder;
	}
	
	// This is the object that receives interactions from clients. See RemoteService for a more complete example.
	private final IBinder mBinder = new LocalBinder();

	/**
	 * Show a notification while this service is running.
	 */
	private void showNotification()
	{
		MyApplication app = MyApplication.getInstance(this);

        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setClass(this, SplashActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|
//				Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
                Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
        );

        // # 【2013-11-24前的老方法】：点此进入的将永远是PortalActivity实例（而不是回到栈顶，从而在语音、视频等地方带来一系列问题）
//		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, PortalActivity.class), 0);

        // # 【2013-11-24后的新方法】：点此进入的将一直是栈顶的Activity从而就避免了因Home键后在语音、视频等地方带来一系列问题）
        // #【补充说明】：本方法的关键是要把intent设置的跟Manifast里的Main intent一样（注意它不是singleTask也行？！）
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);

        RosterElementEntity ree = app.getIMClientManager().getLocalUserInfo();
        // 创建一个Notification
        Notification notification = NotificationHelper.NotificationCreator.createNotification(
                app , contentIntent
                , MessageFormat.format(app.getString(R.string.app_notification_content_title), (ree != null?" ["+ree.getNickname()+"] ":""))
                , app.getString(R.string.app_notification_content_text)
                // 设置显示在手机最上边的状态栏的图标
                , R.drawable.icon
        		, false);
		//让service在前台执行
		this.startForeground(R.string.ident_genius_services_started, notification);
	}
}